package com.tedu.api;

import org.junit.Test;

/**
 * Java面向对象---不是真的面向对象---八大基本数据类型
 * 8个包装类：针对八大基本数据类型提供对应类【方法上基本互通】
 *          不可改变类
 * 包装类报位置：Java.long
 * 八大数据类型（不是面向对象）   针对八大数据类型对应包装类
 *      int                          Integer      继承Number父类【抽象】
 *      long                         Long         继承Number父类【抽象】
 *      double                       Double       继承Number父类【抽象】
 *      short                        Short        继承Number父类【抽象】
 *      float                        Float        继承Number父类【抽象】
 *      byte                         Byte         继承Number父类【抽象】
 *      char                         Character    继承Object父类
 *      boolean                      Boolean      继承Object父类
 */
public class packingAPI {
    @Test
    public void test(){
        int a=1; //不是面向对象，通过【反射】
        //创建int类型对象：Integer
        Integer i=new Integer(a);
        i.toString();
    }
    /**
     * 包装类API：
     * xxxValue方法 ===静态方法value   返回值：对应数据类型
     * 作用：把包装类转换为基本数据类型的方法
     * 测试：6个包装类
     */
    @Test
    public void teatxxxValue(){
        Integer i=new Integer(2);//打包：对应类型放入包装类
        i=i.intValue();//接收：int类型heInteger
        System.out.println(i);
        //测试：其他7个包装类

    }
    @Test
    public void a(){
        Double s1=new Double(3);
        s1=s1.doubleValue();
        System.out.println(s1);
    }
    @Test
    public void b(){
        Byte s2=new Byte("4");
        s2=s2.byteValue();
        System.out.println(s2);
    }
    @Test
    public void f(){
        Float s3=new Float(5);
        s3=s3.floatValue();
        System.out.println(s3);
    }
    //包装类构造器：直接传值，【使用字符串传值：Long包装认为L字符，并不是数值】
    //Long  异常NumberFormatException 数值转换异常
    @Test
    public void l(){
        Long s4=new Long(6);
        s4=s4.longValue();
        System.out.println(s4);
    }
    @Test
    public void B(){
        Boolean s5=new Boolean("true");
        s5=s5.booleanValue();
        System.out.println(s5);
    }
    @Test
    public void aB(){

        Character s6=new Character('a');
        s6=s6.charValue();
        System.out.println(s6);
    }
    /**
     * 包装类具有静态方法
     * valueOf（）  返回值对应数据类型
     * 作用：把包装类转换为基本数据类型的方法
     */
    @Test
    public void testValueOf(){
        int i=Integer.valueOf(1);//打包拆包一体化
        boolean b=Boolean.valueOf(true);
        char c=Character.valueOf('1');
        Float.valueOf(1.123F);//1.123默认 double  编译工具

    }
    /**
     * 包装类------------------Servlet[javaBean]
     * public class Person{
     *     Inter id; //成员---解析
     * }
     * parseXXX()  静态方法  返回值：对应类型
     * 作用：获取到字符串转换为对应类型
     */
    @Test
    public void testParseXXX(){
        String s="123";//将字符串转换为整形
        int i=Integer.parseInt(s);//区别：解析字符串，转换为正确类型
        int is=Integer.valueOf(s);//区别：存入值，打包拆包获取值
        System.out.println(i);
        //将整形转换为字符串
        String s1=String.valueOf(123);//与包装类，用法一致，实现不一致
        //自己测：String s2="456f"   char s='a';
        String s2="456f";
        float f=Float.parseFloat(s2);
        System.out.println(f);
        char s3='a';
        //Character    没有针对字符的解析
    }
    /**
     * 自动拆装箱
     * JDK1.5之前没有自动拆装箱
     * JDK1.5之后自动拆装箱     2004
     */
    @Test
    public void testJ(){
        //JDK1.5之前没有自动拆装箱
        Integer in=Integer.valueOf(1);//装箱
        int ii=in.intValue();//拆箱
        //JDK1.5之后自动拆装箱
        Integer i=1;
        int is=i;
        //编译器帮我们写了拆装箱过程---JVM虚拟机认1.5之前写法
    }

    }